package fr.afcepf.ai85.gepeto.service;

import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;

import javax.faces.model.SelectItem;

import org.hibernate.HibernateException;
import org.hibernate.Query;
import org.hibernate.Session;
import org.hibernate.Transaction;

import fr.afcepf.ai85.businessObj.ResultatPersonel;
import fr.afcepf.ai85.ent.AnneeScolaire;
import fr.afcepf.ai85.ent.Connexion;
import fr.afcepf.ai85.ent.Ecole;
import fr.afcepf.ai85.ent.Encadrant;
import fr.afcepf.ai85.ent.JoursEncadrement;
import fr.afcepf.ai85.ent.MessageEnvoye;
import fr.afcepf.ai85.hibernate.util.HibernateUtil;

public class ServiceJourEncadrement {

	public static List<SelectItem> listeJoursEncadrement() {
		List<JoursEncadrement> liste = null;
		List<SelectItem> listeJoursEncadrement = new ArrayList<SelectItem>();
		try {
			Session session = HibernateUtil.currentSession();
			Transaction tx = session.beginTransaction();
			Query hql = session.createQuery("FROM JoursEncadrement");
			liste = hql.list();

			SimpleDateFormat sdf = new SimpleDateFormat("dd-MM-yyyy");
			List<Date> listeTempo = new ArrayList<Date>();

		
				for (JoursEncadrement l : liste) {

					if (!listeTempo.contains(l.getDateEncadrement())) {

						SelectItem si = new SelectItem(
								l.getIdJoursEncadrement(), sdf.format(l
										.getDateEncadrement()));
						listeJoursEncadrement.add(si);
						System.out.println(l.getEncadrant().getTelEncadrant());
					}
				}
				System.out.println("Yep");
				for(SelectItem l:listeJoursEncadrement){
					System.out.println(l.getDescription());
				}
				
	

			tx.commit();
			HibernateUtil.closeSession();
		} catch (Exception e) {
			// TODO: handle exception
			HibernateUtil.closeSession();
			e.printStackTrace();
		}
		return listeJoursEncadrement;
	}

	public static List<Ecole> listeDesEcoles() {
		List<Ecole> liste = null;
		try {
			Session session = HibernateUtil.currentSession();
			Transaction tx = session.beginTransaction();
			Query hql = session.createQuery("FROM Ecole");
			liste = hql.list();

			tx.commit();
			HibernateUtil.closeSession();
		} catch (HibernateException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
			HibernateUtil.closeSession();
		}
		return liste;
	}

	public static void rechercheMultiCritere(Integer idJoursEncadrement,
			Integer idEcole, String fonction) {
		Session session = HibernateUtil.currentSession();
		Transaction tx = session.beginTransaction();

		Query hql = session
				.createQuery("Select enc.nomEncadrant, enc.prenomEncadrant,jour.dateEncadrement,ec.nomEcole,enc.fonctionEncadrant,jour.typeActivite.nomActivite FROM JoursEncadrement jour, Ecole ec,Encadrant enc  WHERE jour.idJoursEncadrement like :paramJ AND ec.identifiantEcole like :paramE and enc.fonctionEncadrant like :paramF order by enc.nomEncadrant");
		hql.setInteger("paramJ", idJoursEncadrement);
		hql.setInteger("paramE", idEcole);
		hql.setString("paramF", fonction);
		List<Object[]> liste = hql.list();

		if (liste.size() > 0) {

			for (Object[] r : liste) {
				ResultatPersonel rp = new ResultatPersonel();

				// rp.setPrenom(prenom)
				String prenom = (String) r[0];
				String nom = (String) r[1];
				Date d = (Date) r[2];
				String ecole = (String) r[3];
				String foncti = (String) r[4];
				String activite = (String) r[5];

				String a = String.format("nom: " + nom + "\n" + "prenom: "
						+ prenom + "\n" + "date: " + d + "\n" + "ecole: "
						+ ecole + "\n" + "fonction: " + foncti + "\n"
						+ "activite: " + activite);
				System.out.println(a);
			}

		}
		HibernateUtil.closeSession();
	}
	
	
	public static List<ResultatPersonel> resultatRechercheMultiCritere(Integer idJoursEncadrement,Integer idEcole, String fonction) {
		List<ResultatPersonel> listeResultatPersonel=null;
		Session session = HibernateUtil.currentSession();
		Transaction tx = session.beginTransaction();

		Query hql = session
				.createQuery("Select enc.nomEncadrant, enc.prenomEncadrant,jour.dateEncadrement,ec.nomEcole,enc.fonctionEncadrant,jour.typeActivite.nomActivite,enc.idEncadrant FROM JoursEncadrement jour, Ecole ec,Encadrant enc  WHERE jour.idJoursEncadrement like :paramJ AND ec.identifiantEcole like :paramE and enc.fonctionEncadrant like :paramF order by enc.nomEncadrant");
		hql.setInteger("paramJ", idJoursEncadrement);
		hql.setInteger("paramE", idEcole);
		hql.setString("paramF", fonction);
		List<Object[]> liste = hql.list();

		
		if (liste.size() > 0) {
			listeResultatPersonel=new ArrayList<ResultatPersonel>();
			for (Object[] r : liste) {
				ResultatPersonel rp = new ResultatPersonel();

				rp.setPrenom((String) r[0]);
				
				rp.setNom((String) r[1]);
				
				rp.setDateEncadrement((Date) r[2]);
				
				rp.setEcole((String) r[3]);
				
				rp.setFoncti((String) r[4]);		
				
				rp.setActivite((String) r[5]);
				
				rp.setIdEncadrement((Integer) r[6]);
				
				listeResultatPersonel.add(rp);


				System.out.println(rp.getNom()+" "+rp.getPrenom()+" "+rp.getIdEncadrement());
				

			}

		}
		HibernateUtil.closeSession();
		return listeResultatPersonel;
	}

	public static void main(String[] args) {
		// listeJoursEncadrement();
		// listeDesEcoles();
		resultatRechercheMultiCritere(2, 1, "surveillant");
		//listeJoursEncadrement();
	}
}
